/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controllers;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


public class GeradorDeEmails{


	/**
	 * Envia email com anexo para um determinado usuario  
	 * @param anexoPath o caminho do PDF gerado
	 * @param emailDestino para quem sera enviado
	 * @param aprovado se o requerimento foi aprovado ou naoo
	 * @throws UnsupportedEncodingException
	 */
	public static void enviaEmailComAnexo(String anexoPath, String emailDestino, boolean aprovado) throws UnsupportedEncodingException{
		//Pega o dominio do email

		Properties props = System.getProperties();
		props.put("mail.smtp.auth", "true");  
		//tem q ter a senha do usuario do email e tem q ser final
		//se quiser testar muda ai em baixo :P
		final String senha = "Socorro061258";

		//configura se o remetente for o gmail
		//se nao for, tem q usar outra configuraçao
		props.put("mail.smtp.host", "smtp." + "gmail.com");
		props.put("mail.smtp.port", "465");
		props.put("mail.smtp.socketFactory.port", "465");
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.socketFactory.fallback", "false");

		//pra autenticar o usuario
		Authenticator auth = new Authenticator() {
			@Override
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("glauco.sousa6", senha);
			}
		};

		//cria a sessao pra mandar o email
		Session session = Session.getInstance(props, auth);
		MimeMessage message = new MimeMessage(session);
		try {
			//quem manda o email
			//se quiser colocar um nome, ao inves do email, acrescenta uma string
			//como segundo argumento de new InternetAddress
			message.setFrom(new InternetAddress("glauco.sousa6@gmail.com", "PPGI"));
			//pra quem vai enviar
			message.addHeader("BCC", emailDestino);
			//o titulo do email
			message.setSubject("Requerimento do PPGI");
			//o corpo do email
			//message.setContent("Funfou!!", "text/html");
			//cria o mimeBodyPart para configurar as partes do email
			//nesse caso o corpo da mensagem e o arquivo em anexo
			MimeBodyPart mime1 = new MimeBodyPart();
			MimeBodyPart mime2 = new MimeBodyPart();
			//seta a primeira parte qe eh co o corpo
			if(aprovado)
				mime1.setText("O seu requerimento já foi revisado e APROVADO pelo Programa de Pós Graduação em Informática e" +
						"está disponível em anexo! " +
				"\n\n Centro de Ciências Exatas e da Natureza\n Departamento de Informática \n Programa de Pós Graduação em Informática\n ");
			else
				mime1.setText("O seu requerimento já foi revisado e REJEITADO pelo Programa de Pós Graduação em Informática e" +
						"está disponível em anexo! " +
				"\n\n Centro de Ciências Exatas e da Natureza\n Departamento de Informática \n Programa de Pós Graduação em Informática\n ");

			//pega o arquivo, vai ter q ter uma "OpenFile aqui"
			FileDataSource file = new FileDataSource(new File(anexoPath));
			//seta o arquivo na parte
			mime2.setDataHandler(new DataHandler(file));
			mime2.setFileName(file.getName());
			//cria um multipart pra juntar todas as partes da mensagem
			Multipart mp = new MimeMultipart();
			mp.addBodyPart(mime1);
			mp.addBodyPart(mime2);
			message.setContent(mp);
			//coloca uma data pra ficar mais legal :P
			message.setSentDate(new Date());
			//manda a mensagem =D
			Transport.send(message);
		} catch (MessagingException e) {
			// TODO Auto-generated catch block

			e.printStackTrace();
		}




	}


	/**
	 * Envia um email para um determinado usuario
	 * @param emailDestino para quem ira enviar o email
	 * @param mensagem  a mensagem que sera colocada no corpo do email
	 */
	public static void enviaEmail(String emailDestino, String mensagem){

		//Pega o dominio do email

		Properties props = System.getProperties();
		props.put("mail.smtp.auth", "true");  
		//tem q ter a senha do usuario do email e tem q ser final

		//se quiser testar muda ai em baixo :P
		final String senha = "Socorro061258";

		//configura se o remetente for o gmail
		//se nao for, tem q usar outra configuraçao
		props.put("mail.smtp.host", "smtp." + "gmail.com");
		props.put("mail.smtp.port", "465");
		props.put("mail.smtp.socketFactory.port", "465");
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.socketFactory.fallback", "false");

		//pra autenticar o usuario
		Authenticator auth = new Authenticator() {
			@Override
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("glauco.sousa6", senha);
			}
		};

		//cria a sessao pra mandar o email
		Session session = Session.getInstance(props, auth);
		MimeMessage message = new MimeMessage(session);
		try {
			//quem manda o email
			//se quiser colocar um nome, ao inves do email, acrescenta uma string
			//como segundo argumento de new InternetAddress
			message.setFrom(new InternetAddress("glauco.sousa6@gmail.com", "PPGI"));
			//pra quem vai enviar
			message.addHeader("BCC", emailDestino);
			//o titulo do email
			message.setSubject("Requerimento do PPGI");

			MimeBodyPart mime1 = new MimeBodyPart();

			//o corpo do email
			mime1.setText(mensagem + 
					"\n\n Centro de Ciências Exatas e da Natureza\n " +
					"Departamento de Informática \n " +
			"Programa de Pós Graduação em Informática\n");

			Multipart mp = new MimeMultipart();
			mp.addBodyPart(mime1);
			message.setContent(mp);
			//coloca uma data pra ficar mais legal :P
			message.setSentDate(new Date());
			//manda a mensagem =D
			Transport.send(message);
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}





	}

}
